package br.com.sms.dominio;

import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;

import br.com.sms.enuns.UF;

@Entity
@Table(name="cidade", uniqueConstraints={@UniqueConstraint(columnNames={"DS_CIDADE", "UF"})}) 
public class Cidade {
	
	private int id;
	private String nome;
	private List<Destinatario> destinatarios;
	private List<Cliente> clientes;
	private UF uf;
	
	public Cidade(){
		
	}
	
	public Cidade(String nome, UF uf) {
		if(nome != null){
			nome = nome.toUpperCase();
		}
		this.nome = nome;
		this.uf = uf;
	}
	
	public Cidade(String nome, String uf){
		this.nome = nome.toUpperCase();
		this.uf = UF.newInstance(uf.toUpperCase());
	}
	
	public Cidade(Destinatario destinatario){
		if(destinatario.getCidade() != null){
			this.nome = destinatario.getCidade().getNome();
			this.uf = destinatario.getCidade().getUf();
		}else{
			this.nome = "";
		}
	}
	
	public Cidade(Cidade cidade) {
		// TODO Auto-generated constructor stub
	}

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name="CO_CIDADE")
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	
	@Column(name="DS_CIDADE")
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome.toUpperCase();
	}

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "cidade")
	public List<Destinatario> getDestinatarios() {
		return destinatarios;
	}
	public void setDestinatarios(List<Destinatario> destinatarios) {
		this.destinatarios = destinatarios;
	}
	
	@OneToMany(fetch = FetchType.LAZY, mappedBy = "cidade")
	public List<Cliente> getClientes() {
		return clientes;
	}

	public void setClientes(List<Cliente> clientes) {
		this.clientes = clientes;
	}

	@Enumerated(value=EnumType.STRING)
	public UF getUf() {
		return uf;
	}

	public void setUf(UF uf) {
		this.uf = uf;
	}

	@Override
	public String toString() {
		return this.nome + "/" + this.uf;
	}
	
}
